【嵌入式模块】矩阵键盘

您所在的位置:网站首页 单片机键盘输入 方案是什么样的 【嵌入式模块】矩阵键盘

【嵌入式模块】矩阵键盘

2024-07-15 23:39:40| 来源: 网络整理| 查看: 265

前言

  交互式一直是嵌入式中非常重要的一个部分,而按键又是最为常用的交互式器件,这里总结一下最为常用的矩阵键盘的使用方法。

认识矩阵键盘

  一般来说,常见的按键有两种,一种是独立按键,即一个单独的按键一边连接到单片机的管脚上,另一边连接一个上拉或下拉,其电路图如下图所示: 在这里插入图片描述 这样,在按键按下时才会产生上升沿和下降沿的信号。   然而这样的电路意味着每一个开关都需要占有一个输入端口,那有没有用少一点的端口来控制多一点的按键呢?有,那就是矩阵键盘。   所谓矩阵键盘,就是键盘组成n行m列的矩阵形式,每个按键占据行列的一个交点,需要连接的线数为n+m根,但却可以读取n*m个按键,因此是非常“经济”的,其一般的电路图如下图所示。 在这里插入图片描述

注意:矩阵键盘一般要求单片机引脚具有上拉电阻,如果没有需要额外接上。

矩阵键盘的控制方法 1. 扫描法

  扫描法很容易理解,就是逐行输出0,然后读入列值,并检查是否有为0的位,若有,则可以确定是某一行某一列的按键被按下。   在实际应用中,往往会采用一些技巧来加快扫描速度:

① 识别有键按下否。行全部输出0,然后读入列的值,若读入的数据中有一位为0【整体按位检测】,则表明有某个按键被按下,转第②步,否则在本步骤中循环。② 去抖动。延时20ms左右,然后再次检测读入的列值【理论上单片机输出带锁存,所以不需要再次输出行值】,若还有键闭合,则认为确实有一个按键被按下,否则返回第①步。③ 查找被按下的键。从第0行开始,顺序逐行扫描,即逐行输出0。每扫描一行,读入列线数据,若数据中有一位为0,则表示该位对应的列与当前扫描行的交点处的按键被按下。 2. 反转法

  除扫描法之外,还有一种检测按键的思路,就是反转法。

① 将行引脚设定为输出,列引脚设定为输入。然后向行线输出全0,接着读入列线的值,若读入的值中有一位为0【整体按位检测】,则表明与该位对应的列线上有某个键被按下,存储此值为“列值”,转第②步,否则在本步中循环。② 反转输入输出,即行引脚设定为输入,列引脚设定为输出。然后列引脚输出此前记录的“列值”,然后读取行值,其中必有一行为0,这样就可以得到“行值”和“列值”,其中都为0的行和列即为按下的按键对应的位置。 方法的选择?

  初看似乎会觉得反转法更加简单,我一开始也是这样以为的,但后来发现其实这两种方法的简易程度是和单片机类型有关的。有一些单片机的IO引脚可以一次性输出多位,比如51单片机的P1,P2等,还有一些单片机的IO引脚每次只能控制一位,比如Arduino。所以我觉得这两种方法关键是掌握里面的思想。   以51单片机为例,它的IO引脚有一个很重要的特点,那就是IO引脚都是双向的,而且输入输出不需要提前配置,可以直接读取引脚的电平状态,这样的单片机就很适合使用矩阵键盘。下面看一个例程,严格来说,可能更偏向于反转法。

/************************************************************************* * 函 数 名: Key_Scan * 函数功能: 检测有按键按下并读取键值 * 输 入: 无 * 返 回 值: S1~S16分别返回1~16 * 线路连接: P1的高四位为行,P1的低四位为列,具体参考上图 *************************************************************************/ unsigned char Key_Scan() { unsigned char KeyValue = 0; P1 = 0x0f; unsigned char a = 0; //用于按键松手检测 if(P1 != 0x0f) //读取按键是否按下 { delay(1000); //延时10ms进行消抖 if(P1 != 0x0f) //再次检测键盘是否按下 { P1 = 0X0F; //行输入0,检测列值,先判断列 switch(P1) { case(0X07): KeyValue=1;break; case(0X0b): KeyValue=2;break; case(0X0d): KeyValue=3;break; case(0X0e): KeyValue=4;break; } P1 = 0XF0; //列输入0,检测行值,判断行 switch(P1) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭